# ******* Testing VoIP ******

path=$PWD


aux=Hello

# template files
templatesFolder='templates'
scriptController='script_controller.rb'
playrecController='playrec_controller.rb'
comunicandoController='comunicando_controller.rb'
msgAudio='hello_sipper.au'
configSipperFile='sipper.cfg'

# projects folder
projectsFolder='projects'
configFolder='config'
controllersFolder='controllers'

# Patrones de configuración de Sipper.cfg
#defaultRIP='<$DefaultRIP$>'
#defaultRP='<$DefaultRP$>'
#scriptUser='<$ScriptUser$>'
#clientUser='<$ClientUser$>'
#logsPath='<$LogPath$>'
#configPath='<$ConfigPath$>'
#controllerPath='<$ControllerPath$>'


modelo1="Llamada y reproducción de un mensaje."
modelo2="Llamada, grabación y reproducción de un mensaje."
modelo3="Llamada y desconexión antes de que el otro usuario descuelgue."
modelo4="Llamada a un teléfono que está comunicando o descolgado."

# Estructura de directorios
#	- testing-voip.sh
#	- info
#	- templates
#		|-- script_controller.rb
#		|-- sipper.cfg
#		|-- hello_sipper.au
#	- projects

# Estructura de los proyectos Sipper
#	- NombreProyecto
#		|-- config
#		|-- controllers
#		|-- frwk_ext
#		|-- logs
#		|-- Rakefile
#		|-- tests

menuBienvenida(){
	clear
	echo "1) Escriba un nombre para proyecto"
	read projectName
	echo

	if [ -d $projectsFolder/$projectName ]; then
		echo "El proyecto $projectName ya existe. Por favor, elija otro nombre"
		echo
		exit
	else
		cd $projectsFolder
		sproj $projectName
		cd ..
		cp $templatesFolder/$msgAudio $projectsFolder/$projectName/$controllersFolder
		cp $templatesFolder/$scriptController $projectsFolder/$projectName/$controllersFolder
		echo
		echo "	 Proyecto '$projectName' creado."
		echo "	 Path completo: $path/$projectsFolder/$projectName"
		echo
	fi
}

menuEscenarios(){
	echo "2) Escenarios de pruebas"
	echo '	1)' $modelo1
	echo '	2)' $modelo2
	echo '	3)' $modelo3
	echo '	4)' $modelo4
	echo '	5)' $menuSalir
	echo
	echo "Elija uno: "
	read opcion
	echo
}

menuOpcionesModelo(){
	case $opcion in
		1)
			# Llamada y reproducción de un mensaje
			echo $modelo1
			echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			echo "### TestType ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			echo ":TestType: play" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			menuConfProxy;
			menuConfUser;
			menuConfSipperLocal;
			menuConfMediaSupport;
			;;
		2)
			# Llamada, grabación y reproducción de un mensaje
			echo $modelo2
			echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			echo "### TestType ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			echo ":TestType: record" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
			menuConfProxy;
			menuConfUser;
			menuConfSipperLocal;
			menuConfMediaSupport;
			cp $templatesFolder/$playrecController $projectsFolder/$projectName/$controllersFolder
			;;
		3)
			echo $modelo3
			# Llamada y desconexión antes de que el otro usuario descuelgue.
			;;
		4)
			echo $modelo4
			# Llamada a un teléfono que está comunicando o descolgado.
			menuConfProxy;
			menuConfUser;
			menuConfSecondCaller;
			menuConfSipperLocal;
			menuConfSipperLocalSecondUser;
			menuConfMediaSupport;
			cp $templatesFolder/$comunicandoController $projectsFolder/$projectName/$controllersFolder
			echo "-- Para iniciar el test ejecute: --"
			echo "	srun -c projects/NOMBRE_PROYECTO/controllers/script_controller.rb"
			echo "	srun -c projects/NOMBRE_PROYECTO/controllers/comunicando_controller.rb"
			;;
		5)
			echo $menuSalir
			;;
		*)
			echo "Error..."
			echo
	esac
}

menuConfProxy(){
	echo "3) Configure el servidor SIP"
	echo "	 IP: "
	read serverIP
	echo "	 Port: "
	read serverPort
	echo

	# modificando ip del servidor sip
	#cambioDefaultRIP="/$defaultRIP/s//$serverIP/g"
	#sed $cambioDefaultRIP $projectsFolder/$projectName/$configFolder/$configSipperFile > $projectsFolder/$projectName/$configFolder/$configSipperFile.modified
	# modificando puerto del servidor sip
	#cambioDefaultRP="/$defaultRP/s//$serverPort/g"
	#sed $cambioDefaultRP $projectsFolder/$projectName/$configFolder/$configSipperFile.modified > $projectsFolder/$projectName/$configFolder/$configSipperFile
	#rm $projectsFolder/$projectName/$configFolder/$configSipperFile.modified

	echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo "### SIP Server ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":DefaultRIP: $serverIP" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":DefaultRP: $serverPort" >> $projectsFolder/$projectName/$configFolder/$configSipperFile

	echo "	 Servidor SIP http://$serverIP:$serverPort/ configurado."
	echo
}

menuConfUser(){
	echo "4) Configure los usuarios de OpenSips"
	echo "	 - Usuario Origen (script)"
	read usuarioOrigen
	echo "	 - Usuario Destino (telefono)"
	read usuarioDestino
	echo

	echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo "### SIP Server's Users ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":ScriptUser: $usuarioOrigen" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":ClientUser: $usuarioDestino" >> $projectsFolder/$projectName/$configFolder/$configSipperFile

	echo "	 El usuario $usuarioOrigen llamará al usuario $usuarioDestino"
	echo
}

menuConfSecondCaller(){
	echo "	 Configure el usuario que realizará la segunda llamada."
	echo "		(Este usuario llamará a un telefóno que ya mantendrá una conversación.)"
	echo "	 - Segundo Usuario"
	read usuarioSegundo
	echo

	echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo "### SIP Server's Second User ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":SecondUser: $usuarioSegundo" >> $projectsFolder/$projectName/$configFolder/$configSipperFile

	echo "	 El usuario $usuarioSegundo realizará la segunda llamada."
	echo
}

menuConfSipperLocal(){
	echo "5) Configure el Sipper que utilizará el usuario"
	echo "	 IP: "
	read localSipperIP
	echo "	 Port: "
	read localSipperPort
	echo

	echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo "### Sipper Local ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":LocalSipperIP: $localSipperIP" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":LocalSipperPort: $localSipperPort" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	
	echo "	 Sipper Local configurado. IP=$localSipperIP	Port=$localSipperPort"
	echo
}

menuConfSipperLocalSecondUser(){
	echo "	 Configure ahora el Sipper del segundo usuario"
	echo "	 IP: "
	read secondSipperIP
	echo "	 Port: "
	read secondSipperPort
	echo

	echo "" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo "### Second User's Sipper ###" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":SecondSipperIP: $secondSipperIP" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	echo ":SecondSipperPort: $secondSipperPort" >> $projectsFolder/$projectName/$configFolder/$configSipperFile
	
	echo "	 Sipper para el segundo usuario configurado."
	echo "		IP=$secondSipperIP	Port=$secondSipperPort"
	echo
}

menuConfMediaSupport(){
	#sed '/ADI[OI]S/s//------/g' ejem1 > ejem1.cambiado
	#sed '/[0-9][0-9][0-9][0-9]/s//****/g' ejem1 > ejem1.cambiado ; cat ejem1.cambiado
	#sed '/false/s//true/g' $projectsFolder/$projectName/$configFolder/$configSipperFile > $projectsFolder/$projectName/$configFolder/$configSipperFile

	# Activamos el soporte media
	sed '/:SipperMedia: false/s//:SipperMedia: true/g' $projectsFolder/$projectName/$configFolder/$configSipperFile > $projectsFolder/$projectName/$configFolder/$configSipperFile.modified

	sed '/:SipperMediaProcessReuse: false/s//:SipperMediaProcessReuse: true/g' $projectsFolder/$projectName/$configFolder/$configSipperFile.modified > $projectsFolder/$projectName/$configFolder/$configSipperFile

	rm $projectsFolder/$projectName/$configFolder/$configSipperFile.modified

	# Cambiamos el puerto de control
	#sed '/:SipperMediaDefaultControlPort: [0-9][0-9][0-9][0-9]/s//:SipperMediaDefaultControlPort: ****/g' $projectsFolder/$projectName/$configFolder/$configSipperFile > $projectsFolder/$projectName/$configFolder/$configSipperFile
}


menuBienvenida;
menuEscenarios;
menuOpcionesModelo;


#projectName='prueba1'

#menuConfProxy;
#menuConfUser;


exit
